package users;

import info.Conference;
import info.Manuscript;
import java.util.List;

/**
 * The Program Chair class is modeled after the functions and
 * responsibilities that a Program Chair will have.  The Program Chair
 * will manage manuscript submissions for the conference he is
 * responsible for, and will distribute these submissions to individuals
 * he has designated as Subprogram Chairs.  These Subprogram Chairs will
 * aid the Program Chair in making a decision whether to accept the
 * manuscript submissions or reject them.  Acceptance is dependent on
 * the judgments of experts and the quality of the material.  Accepted
 * material is subsequently published, where it becomes available for
 * viewing on the conference site and the MSEE archives library.
 *  
 * @author Aaron Chen
 * @version skeleton
 */
public class ProgramChair extends AbstractRole {

  /** The conference that the Program Chair is responsible for. */
  private Conference my_conference;

  /** The list of Subprogram Chairs that the Program Chair has assigned. */
  private List my_subprogram_chairs;

  /** The list of manuscripts that the Program Chair has received for
   * review from the manuscript submissions. */
  private List my_manuscripts;


  /**
   * Constructs a new Program Chair role.
   * @param the_conference The conference that the Program Chair is
   * responsible for.
   */
  public ProgramChair(final Conference the_conference) {
    super(the_conference);
    // TODO Auto-generated constructor stub
  }
  
  /**
   * Assigns a Subprogram Chair role for the Program Chair's conference.
   * @param the_user The user to be assigned as a Subprogram Chair.
   * @return true if the user was successfully assigned a Subprogram
   * Chair role; false otherwise.
   */
  public boolean assignSubprogramChairRole(final User the_user) {
    //TODO assignSubprogramChairRole
    return false;
  }

  /**
   * Assigns a manuscript to a Subprogram Chair for reviewing.  A
   * Subprogram Chair may only have a limited number of manuscripts to
   * review.  A single manuscript can only be assigned to one Subprogram
   * Chair.
   * @param the_manuscript The manuscript to be assigned.
   * @param the_spc The Subprogram Chair to receive the manuscript assignment.
   * @return true if the manuscript was assigned successfully to the
   * Subprogram Chair; false otherwise.
   */
  public boolean assignManuscriptToSubprogramChair(final Manuscript the_manuscript,
                                                   final SubprogramChair the_spc) {
    //TODO assignManuscriptToSubprogramChair
    return false;
  }

  /**
   * Marks the manuscript as accepted if the manuscript has not yet
   * had a decision made on it or it is before the decision deadline.
   * @param the_manuscript The manuscript to be accepted.
   * @return true if the manuscript was successfully accepted; false
   * otherwise.
   */
  public boolean acceptManuscript(final Manuscript the_manuscript) {
    //TODO acceptManuscript
    return false;
  }

  /**
   * Marks the manuscript as rejected if the manuscript has not yet
   * had a decision made on it or it is before the decision deadline.
   * @param the_manuscript The manuscript to be rejected.
   * @return true if the manuscript was successfully rejected; false
   * otherwise.
   */
  public boolean rejectManuscript(final Manuscript the_manuscript) {
    //TODO rejectManuscript
    return false;
  }

  public Conference getConference() {
    return my_conference;
  }
  public List getSubprogramChairs() {
    return my_subprogram_chairs;
  }
  public List getManuscripts() {
    return my_manuscripts;
  }

}
